package com.benshou.bcss.common.lock;

import lombok.NonNull;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;

/**
 * 等待资源的方法
 *
 * @author <a href="mailto:liuzhenbang@benshou.com">Liu Zhenbang</a>
 */
public interface Awaiting<T extends Condition> {

    /**
     * 等待资源
     *
     * @param condition Condition 实例
     * @param timeoutRemains 剩余超时时间
     * @param unit 剩余超时时间的单位
     * @throws InterruptedException 若被外部中断，抛出此异常
     */
    void await(
            @NonNull T condition,
            long timeoutRemains,
            @NonNull TimeUnit unit) throws InterruptedException;
}
